package com.jrx.anytxn.param.mapper.ext;

import com.jrx.anytxn.common.annotation.ParamTuningAnnotation;
import com.jrx.anytxn.param.entity.PrCreditLimitMapping;
import com.jrx.anytxn.param.mapper.base.PrCreditLimitMappingMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Classname ExtPrCreditLimitMappingMapper
 * @Description 额度节点映射mapper
 * @Date 2019/7/17 0017 下午 14:46
 * @Created by yf
 */
public interface ExtPrCreditLimitMappingMapper extends PrCreditLimitMappingMapper {

    /**
     * 根据租户ID查询所有
     *
     * @param tenantId 租户ID
     * @return java.util.List<com.jrx.anytxn.param.entity.PrCreditLimitMapping>
     * @author fan.yang
     * date: 2019/10/16 0016 下午 15:02
     */
    List<PrCreditLimitMapping> selectLimitMappingByTenId(String tenantId);

    /**
     * 根据租户ID，渠道和产品ID查询信息
     *
     * @param tenantId  租户ID
     * @param channel   渠道
     * @param productId 产品ID
     * @return com.jrx.anytxn.param.entity.PrCreditLimitMapping
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:36
     */
    PrCreditLimitMapping selectByTenIdAndProIdAndChannel(@Param("tenantId") String tenantId, @Param("channel") String channel, @Param("productId") String productId);

    /**
     * 根据租户ID，渠道和产品ID删除信息
     *
     * @param tenantId  租户ID
     * @param channel   渠道
     * @param productId 产品ID
     * @return int
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:37
     */
    @ParamTuningAnnotation
    int deleteByTenIdAndChannelAndProId(@Param("tenantId") String tenantId, @Param("channel") String channel, @Param("productId") String productId);

    /**
     * 根据租户ID，渠道和产品ID编辑信息
     *
     * @param prCreditLimitMapping 额度节点映射实体
     * @return int
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:44
     */
    @ParamTuningAnnotation
    int updateByTenIdAndChannelAndProId(PrCreditLimitMapping prCreditLimitMapping);

    /**
     * 获取额度节点ID
     *
     * @param organizationId 机构号
     * @param channel        渠道
     * @param productId      产品ID
     * @param tenantId       租户ID
     * @return java.lang.String
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:49
     */
    String selectLimitId(@Param("organizationId") String organizationId, @Param("channel") String channel, @Param("productId") String productId, @Param("tenantId") String tenantId);

    /**
     * @param organizationId
     * @param channel
     * @return java.util.List<java.lang.String>
     * @author Qingyao Xing
     * @date 2019/8/6 14:50
     */
    List<PrCreditLimitMapping> selectLimitListId(@Param("channel") String channel, @Param("organizationId") String organizationId, @Param("tenantId") String tenantId);

    /**
     * 根据组织号和渠道号，获取产品有效的节点映射数据
     *  @param organizationId
     * @param channel
     * @return java.util.List<com.jrx.anytxn.customer.entity.PrCreditLimitMapping>
     * @throw
     * @author Qingyao Xing
     * @date 2019/7/29 15:17
     */
    List<PrCreditLimitMapping> selectLimitMappingAndProductByChannelAndOrganizationId(@Param("organizationId") String organizationId, @Param("channel") String channel, @Param("tenantId") String tenantId);

    /**
     * 获取租户下所有额度节点ID
     * @param tenantId
     * @return
     */
    List<String> selectLimitIdByTenId(String tenantId);

    /**
     * 信用就医替换 selectLimitIdByTenId
     * 获取租户下所有额度节点ID
     * @param tenantId
     * @param productIds
     * @return
     */
    List<String> selectLimitIdByTenIdAndProductIds(@Param("tenantId") String tenantId, @Param("productIds") List<String> productIds);

    /**
     * 获取租户下指定产品的所有额度节点ID
     * @param tenantId
     * @param productId
     * @return
     */
    List<String> selectByTenantIdAndProductId(@Param("tenantId") String tenantId, @Param("productId") String productId);

    /**
     * 根据条件查询映射信息
     * @param organizationId
     * @param channel
     * @param tenantId
     * @param limitId
     * @return
     */
    List<PrCreditLimitMapping> selectLimitListIdAndTenantId(@Param("organizationId") String organizationId,
                                                            @Param("channel") String channel,
                                                            @Param("tenantId") String tenantId,
                                                            @Param("limitId") String limitId);


}
